﻿#define _CRT_SECURE_NO_WARNINGS 1
#include"heap.h"
#include<time.h>
void test1()
{
	Heap hp;
	HeapInit(&hp);
	int a[] = { 65,100,70,32,50,60 };
	for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
	{
		HeapPush(&hp, a[i]);
	}
	int top = HeapTop(&hp);
	HeapPop(&hp);

	
	int ret = HeapSize(&hp);
	printf("%d\n", top);
	printf("%d\n", ret);
}
//void Heapsort(HPDatatype* a, int n)
//{
//	Heap hp;
//	HeapInit(&hp);
//	int a[] = { 6,7,9,5,9,7,10,6,7,1 };
//	int i = 0;
//	for ( i = 0; i < sizeof(a) / sizeof(a[0]);i++);
//	{
//		HeapPush(&hp, a[i]);
//
//	}
//	int i = 0;
//	while (!HeapEmpty(&hp))
//	{
//		int top = HeapTop(&hp);
//		HeapPop(&hp);
//		printf("%d ", top);
//	}
//	HeapDestroy(&hp);
//}
 //堆排序
void Heapsort(HPDatatype* a, int n)
{
	//for (int i = 1; i < n; i++)
	//{
	//	AdjustUP(a, i);//向上调整建堆
	//}
	//向下调整建堆更优
	for (int i = (n - 1 - 1) / 2; i >= 0; i--)
	{
		AdjustDown(a, n, i);
	}
	int end = n - 1;
	while (end > 0)
	{
		Swap(&a[0], &a[end]);
		AdjustDown(a, end, 0);
		end--;
	}
	
}

/// /////TOPK
//void CreateData()
//{
//	int n = 1000;
//	srand(time(0));
//	const char* file = "data.txt";
//	FILE* fin = fopen(file, "w");
//	if (fin == NULL)
//	{
//		perror("fin");
//		return;
//	}
//	for (size_t i = 0; i < n; i++)
//	{
//		int x = rand() % 1000000;
//		fprintf(fin, "%d\n", x);
//	}
//	fclose(fin);
//	fin = NULL;
//}
//void Printtopk(int k)
//{
//	const char* file = "data.txt";
//	FILE* fout = fopen(file, "r");
//	if (fout == NULL)
//	{
//		perror("fin");
//		return;
//	}
//	int* kmin = (int*)malloc(sizeof(int)*k);
//	if (kmin == NULL)
//	{
//		perror("malloc");
//		return;
//	}
//	for (int i = 0; i < k; i++)
//	{
//		fscanf(fout, "%d", &kmin[i]);
//	}
//	//建小堆；
//	for (int i = (k - 1 - 1) / 2; i >= 0; i--)
//	{
//		AdjustDown(kmin, k, i);
//	}
//	int val = 0;
//	while (!feof(fout))
//	{
//		fscanf(fout, "%d", &val);
//		if (val > kmin[0])
//		{
//			kmin[0] = val;
//			AdjustDown(kmin, k, 0);
//		}
//		
//	}
//	for (int i = 0; i < k; i++)
//	{
//		printf("%d ", kmin[i]);
//	}
//	fclose(fout);
//	fout = NULL;
//}
int main()
{
	//test1();
	
	int a[] = { 6,7,9,5,9,1,10,3};
	Heapsort(a, sizeof(a) / sizeof(a[0]));
	//CreateData();
	/*Printtopk(5);*/
	return 0;
}